package cn.hy.机考.part01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author zhaomu
 * 二、连续子区间和
 * 一串含有 c 个正整数的数组，求出有多少个下标的连续区间，它们的和大于等于 x
 * 第一行两个整数 c x
 * 第二行有 c 个正整数
 * 输出一个整数，表示所求的个数、
 * <p>
 * 3 6
 * 2 4 7
 * 输出:4
 * 对于有 3 个整数构成的数组而言，总共有 6 个下标连续的区间，他们的和分别 为:
 * 2 = 2
 * 4 = 4
 * 7 = 7
 * 2 + 4= 6
 * 4 + 7 = 11
 * 2 + 4 + 7 = 13
 * 其中有 4 个和大于等于 6，所以答案等于 4
 */
public class Demo02 {

    /**
     * 思路:
     * (1) 先将左端点j固定在0位置，移动右端点i，直到区间和>=x，在此时固定左端点的情况下，右端点已经没有必要再往右移了，右边的c-i个右端点肯定满足区间和不小于x，可以产生c-i个符合条件的区间。
     *
     * (2) 固定右端点i，右移左端点j看是否还能满足区间和不小于x，满足的话，计数就不断地累加c-i。
     *
     * (3) 回到(1)继续右移右端点，重复(1)(2)步骤
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] params = br.readLine().trim().split(" ");
        int c = Integer.parseInt(params[0]), x = Integer.parseInt(params[1]);
        params = br.readLine().trim().split(" ");
        int[] arr = new int[c];
        for (int i = 0; i < c; i++)
            arr[i] = Integer.parseInt(params[i]);
        long sum = 0, count = 0;
        int j = 0;
        for (int i = 0; i < c; i++) {
            sum += arr[i];
            while (sum >= x && j <= i) {
                count += c - i; // 产生结果
                sum -= arr[j]; // 看看是否可以收缩
                j++;
            }
        }
        System.out.println(count);
    }
}
